package com.hexseek.libretvcloud.service;

import com.hexseek.libretvcloud.exception.CustomException;
import com.hexseek.libretvcloud.mapper.UserConfigMapper;
import com.hexseek.libretvcloud.model.UserConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author zhougb9
 * @version 1.0.0
 * @description 用户服务类，处理用户配置的获取和更新
 * @date 2025/5/14 18:06
 * @title UserService
 */
@Service
public class UserService {

    @Autowired
    private UserConfigMapper userConfigMapper;

    // 获取用户配置，如果不存在则创建默认配置
    public UserConfig getUserConfig(String userId) {
        Object result = userConfigMapper.findByUserId(userId)
                .orElseGet(() -> {
                    UserConfig config = new UserConfig();
                    config.setUserId(userId);
                    return userConfigMapper.insert(config);
                });

        // 确保返回类型正确
        if (result instanceof UserConfig) {
            return (UserConfig) result;
        }

        // 如果无法转换为UserConfig，抛出异常或返回null（根据业务需求）
        throw new IllegalStateException("Unexpected result type from database: " + result.getClass());
    }

    // 更新用户配置
    public UserConfig updateUserConfig(String userId, UserConfig updatedConfig) {
        UserConfig config = getUserConfig(userId);

        //
        if (updatedConfig.isAdultEnabled() != config.isAdultEnabled()) {
            config.setAdultEnabled(updatedConfig.isAdultEnabled());
        }

        // 检查并更新广告过滤设置
        if (updatedConfig.isAdFilterEnabled() != config.isAdFilterEnabled()) {
            config.setAdFilterEnabled(updatedConfig.isAdFilterEnabled());
        }

        // 可以添加更多字段的检查和更新

        // 使用update方法更新配置
        UserConfig updatedResult = userConfigMapper.update(config);

        // 确保返回类型正确
        if (updatedResult != null) {
            return updatedResult;
        }
        throw new CustomException("数据库返回类型不正确");
    }
}